package cn.wzg.datastorage;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class BookHelper extends SQLiteOpenHelper {
    public BookHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    public BookHelper(@Nullable Context context) {
        //调用构造函数，若数据库不存在则创建数据库，否则打开数据库
        super(context, "book.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //在此创建表，创建数据库后执行一次，数据库存在后不再执行（否则以前的数据无法保存）
        db.execSQL("create table book(id integer primary key autoincrement,name,author,price);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //app升级，可能需要修改表或者增加表，在此执行

    }
    /*
        SQLite ALTER TABLE
        SQLite 支持ALTER TABLE语句的有限子集。 SQLite 中的此语句允许用户重命名表或向现有表添加新列。
        无法重命名列，删除列或从表中添加或删除约束。
            sqlite> CREATE TABLE Names(Id INTEGER, Name TEXT);
        让我们创建一个要重命名的表Names。
            sqlite> ALTER TABLE Names RENAME TO NamesOfFriends;
        我们将表重命名为NamesOfFriends。
            sqlite> .schema NamesOfFriends
            CREATE TABLE "NamesOfFriends"(Id INTEGER, Name TEXT);
        我们验证重命名表的架构。
        假设我们要向表中添加一个新列。
            sqlite> ALTER TABLE NamesOfFriends ADD COLUMN Email TEXT;
        SQL 语句将名为Email的新列添加到表中。
            sqlite> .schema NamesOfFriends
            CREATE TABLE "NamesOfFriends"(Id INTEGER, Name TEXT, Email TEXT);
        在这里，我们看到了表的新结构。
     */
}
